package com.example.practice;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.PointF;
import android.opengl.Matrix;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class TpActivity extends AppCompatActivity {
    private ImageView imageView;
    int i=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tp);
        imageView = findViewById(R.id.tp);
        Intent intent = getIntent();
        String bitmap = intent.getStringExtra("bitmap");
        final Bitmap bitm=getBitmap(bitmap);
        imageView.setImageBitmap(bitm);
        //添加触摸监听对象(控件被触摸就会触发TouchListener类)


        //ima的触摸事件
        imageView.setOnTouchListener(new View.OnTouchListener() {
            android.graphics.Matrix matrix = new android.graphics.Matrix();
             android.graphics.Matrix currentMatrix=new android.graphics.Matrix();//存放照片当前的矩阵
             float startDis;//开始距离
             PointF midPoint;//中心点
            //参数1:用户触摸的控件；参数2:用户触摸所产生的事件
            @Override
            public boolean onTouch(View view, MotionEvent event) {

                switch (event.getAction()&MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_MOVE://手指在屏幕移动，改事件会不断被调用
                        float endDis=distance(event);//结束距离
                        //结束距离除以开始距离得到缩放倍数
                        float scale=endDis/startDis;
                        //通过矩阵实现缩放
                        //参数：1.2.指定在xy轴的放大倍数;3,4以哪个参考点进行缩放
                        //开始的参考点以两个触摸点的中心为准
                        matrix.set(currentMatrix);//在没有进行缩放之前的基础上进行缩放
                        matrix.postScale(scale,scale,midPoint.x,midPoint.y);
                        break;
                    case MotionEvent.ACTION_POINTER_DOWN://当屏幕上已经有触点(手指)，再有一个手指按下屏幕，就会触发这个事件
                        startDis=distance(event);
                        midPoint=mid(event);
                        currentMatrix.set(imageView.getImageMatrix());//记录ImageView当前的缩放倍数

                        break;
                }
                //将imageView的矩阵位置改变
                imageView.setImageMatrix(matrix);

                return true;
            }
        });


    }


    //计算两点之间的距离(勾股定理)
    public float distance(MotionEvent event) {
        //因为多点触控会导致数组越界。所以用try catch包容一下

        try {
            float dx = event.getX(1)-event.getX(0);
            float dy = event.getY(1)-event.getY(0);
            return(float)Math.sqrt(dx*dx+dy*dy);
        }catch (Exception e){
            e.printStackTrace();
        }
        return 0;
    }
    //计算两个点的中心点
    public static PointF mid(MotionEvent event) {
        float midx = (event.getX(1) + event.getX(0)) / 2;
        float midy = (event.getY(1) + event.getY(0)) / 2;
        return new PointF(midx, midy);
//        imageView.setOnClickListener(new View.OnClickListener() {
//            @Override
//            public void onClick(View view) {
//                if(i<2){
//                    i++;
//                int width = bitm.getWidth();
//                int height = bitm.getHeight();
//                    ViewGroup.LayoutParams linearParams = imageView.getLayoutParams();
//                    linearParams.height = height*2*i;// 当控件的高强制设成75象素
//                    linearParams.width=width*2*i;
//                    imageView.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件mGrid2
//                }else {
//                    i=0;
//                    int width = bitm.getWidth();
//                    int height = bitm.getHeight();
//                    ViewGroup.LayoutParams linearParams = imageView.getLayoutParams();
//                    linearParams.height = height;// 当控件的高强制设成75象素
//                    linearParams.width=width;
//                    imageView.setLayoutParams(linearParams); // 使设置好的布局参数应用到控件mGrid2
//                }
//            }
//        });
//    }
//
    }
    private Bitmap getBitmap(String url) {
        try {
            FileInputStream fis = new FileInputStream(url);
            return BitmapFactory.decodeStream(fis);  ///把流转化为Bitmap图片
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return null;

    }
}
